#ifndef WAREHOUSEPERMISSION_H
#define WAREHOUSEPERMISSION_H

#include <QString>
#include <QDateTime>

/**
 * @brief 仓库权限表实体类
 *
 * 该类对应数据库中的仓库权限关联表，用于记录用户与仓库之间的权限关系，
 * 实现用户对特定仓库的访问权限控制，包含用户ID、仓库ID及时间戳等核心属性。
 */
class WarehousePermission
{
private:
    int id;                     // 主键ID，唯一标识一条权限记录
    int user_id;                // 用户ID，关联拥有权限的用户
    int warehouse_id;           // 仓库ID，关联被授权访问的仓库
    QDateTime create_time;      // 创建时间，记录权限添加的时间戳
    QDateTime update_time;      // 更新时间，记录权限信息最后修改的时间戳

public:
    /**
     * @brief 无参构造函数
     *
     * 初始化所有数值类型属性为0，时间戳为默认值，
     * 适合需要后续通过setter方法设置权限信息的场景。
     */
    WarehousePermission()
        : id(0),
          user_id(0),
          warehouse_id(0)
    {}

    /**
     * @brief 全参数构造函数
     *
     * 一次性初始化所有属性，适合从数据库读取权限记录后直接创建对象。
     *
     * @param id            权限记录ID
     * @param user_id       关联的用户ID
     * @param warehouse_id  关联的仓库ID
     * @param create_time   权限创建时间戳
     * @param update_time   权限信息最后更新时间戳
     */
    WarehousePermission(int id,
                       int user_id,
                       int warehouse_id,
                       const QDateTime& create_time,
                       const QDateTime& update_time)
        : id(id),
          user_id(user_id),
          warehouse_id(warehouse_id),
          create_time(create_time),
          update_time(update_time)
    {}

    // -------------------------- Getter 方法 --------------------------

    /**
     * @brief 获取权限记录ID
     * @return 权限记录的主键ID
     */
    int get_id() const { return id; }

    /**
     * @brief 获取关联用户ID
     * @return 拥有该仓库权限的用户ID
     */
    int get_user_id() const { return user_id; }

    /**
     * @brief 获取关联仓库ID
     * @return 被授权访问的仓库ID
     */
    int get_warehouse_id() const { return warehouse_id; }

    /**
     * @brief 获取权限创建时间
     * @return 权限记录添加时的时间戳
     */
    QDateTime get_create_time() const { return create_time; }

    /**
     * @brief 获取权限更新时间
     * @return 权限信息最后修改时的时间戳
     */
    QDateTime get_update_time() const { return update_time; }

    // -------------------------- Setter 方法 --------------------------

    /**
     * @brief 设置权限记录ID
     * @param value 新的权限记录ID
     */
    void set_id(int value) { id = value; }

    /**
     * @brief 设置关联用户ID
     * @param value 新的用户ID
     */
    void set_user_id(int value) { user_id = value; }

    /**
     * @brief 设置关联仓库ID
     * @param value 新的仓库ID
     */
    void set_warehouse_id(int value) { warehouse_id = value; }

    /**
     * @brief 设置权限创建时间
     * @param value 新的创建时间戳
     */
    void set_create_time(const QDateTime& value) { create_time = value; }

    /**
     * @brief 设置权限更新时间
     * @param value 新的更新时间戳
     */
    void set_update_time(const QDateTime& value) { update_time = value; }
};

#endif // WAREHOUSEPERMISSION_H
